#include <stdio.h>

// 生命周期: 变量占用的内存空间何时被分配、何时被回收
// 作用域: 在什么范围内可以访问

// 全局变量
// 没有被任何 {} 包住的变量叫做全局变量
// 生命周期: 程序开始运行时(main函数执行之前)就被创建 程序结束时消亡
// 作用域: 全局变量一旦定义好之后 整个文件中都是可以使用的
int v1 = 1314;

int v4; // 全局变量 即使不初始化 里面也是0

int v5 = 11223344;

int func(){
	// 局部变量
	int v3 = 520;
	printf("func : v1 = %d\n", v1); // 13140
	// printf("func : v2 = %d\n", v2); // 无法访问 报错
	printf("func : v3 = %d\n", v3); // 520
}

int main(int argc, const char *argv[])
{
	// 局部变量
	// 被任何 {} 包住的变量我们都称之为局部变量
	// 生命周期: 程序执行到定义变量的语句时被创建 最近的{}结束时消亡
	// 作用域: 只有在最近的 {} 内部可以访问
	int v2 = 1234;

	printf("main : v1 = %d\n", v1); // 1314
	v1 *= 10; // 修改了全局的v1
	printf("main : v2 = %d\n", v2); // 1234 
	//printf("main : v3 = %d\n", v3); // 无法访问 报错
	
	func();

	printf("v4 = %d\n", v4); // 0

	// 如果全局变量和局部变量命名重复 采用局部优先的原则
	int v5 = 4321;
	printf("v5 = %d\n", v5); // 4321

	return 0;
}
